// 有 1、2、3、4 四个数字，能组成多少个互不相同且无重复数字的三位数？都是多少？
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char str[30] = "1-2-3-4";               // 存储初始四个数值
int print_combo(int a, int b, int c);   // 打印三个数组随机组合，返回组合个数
int main(int argc, char *argv[])
{
    int i = 0,cnt = 0;          // 计数值
    int n1 = 0;                 // 存储三个数字的变量
    int n2 = 0;
    int n3 = 0;
    char *arr[30] = {str};
    while((arr[i] = strtok(arr[i], "-")) && ++i);   // 字符串分割函数，分割后存储在arr指针数组中
#if 0
    // 验证字符串分割函数
    i=0;
    while(arr[i])
    {
        printf("%s\n", arr[i]);
        i++;
    }
#endif
    for(i = 1; i <= 4; i++)
    {
        switch(i)
        {
            // 选出除i以外的另外三个数值
            case 1: n1 = atoi(arr[1]);n2 = atoi(arr[2]);n3 = atoi(arr[3]);break;
            case 2: n1 = atoi(arr[0]);n2 = atoi(arr[2]);n3 = atoi(arr[3]);break;
            case 3: n1 = atoi(arr[1]);n2 = atoi(arr[0]);n3 = atoi(arr[3]);break;
            case 4: n1 = atoi(arr[1]);n2 = atoi(arr[2]);n3 = atoi(arr[0]);break;
            default: break;
        }
        // 调用打印函数，并收集计数值
        cnt += print_combo(n1,n2,n3);
    }
    printf("总个数为：%d\n", cnt);  // 打印计数值
    return 0;
}
int print_combo(int a, int b, int c)
{
    char str[20] = "";
    int cnt = 0;
    for(int i = 0; i < 3; i++)
    {
        switch(i)
        {
            case 0:     
                sprintf(str, "%d%d%d", a,b,c);  // 组包
                printf("%s\n", str);            // 打印
                sprintf(str, "%d%d%d", b,a,c);
                printf("%s\n", str);
                cnt += 2;                       // 计数
                break;
            case 1:     
                sprintf(str, "%d%d%d", a,c,b);
                printf("%s\n", str);
                sprintf(str, "%d%d%d", c,a,b);
                printf("%s\n", str);
                cnt += 2;
                break;
            case 2:     
                sprintf(str, "%d%d%d", b,c,a);
                printf("%s\n", str);
                sprintf(str, "%d%d%d", c,b,a);
                printf("%s\n", str);
                cnt += 2;
                break;
            default:
                break;
        }
    }
    return cnt;
}